package leetcode.interviewClassics;

/**
 * @author Cheng Jun
 * Description: 给定一个integer整数，写一个函数来判断它是否是 4 的幂次方。如果是，返回 true ；否则，返回 false 。
 * <p>
 * 整数 n 是 4 的幂次方需满足：存在整数 x 使得 n == 4^x
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/power-of-four
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @version 1.0
 * @date 2022/8/6 17:35
 * 二刷
 */
public class isPowerOfFour {

    public static void main(String[] args) {

    }

    private static boolean isPowerOfFour(int n) {
        while (n != 1) {
            if (n <= 0 || n % 4 != 0) return false;
            n /= 4;
        }
        return n == 1;
    }

    // https://leetcode.cn/problems/power-of-four/solution/4de-mi-by-leetcode-solution-b3ya/
    // 判断是不是2的幂次方，再判断是不是4的幂次方
    private static boolean isPowerOfFour1(int n) {
        // x的幂次方是n，那么 n 除以 x-1的余数是1
        return (n > 0) && (n & (n - 1)) == 0 && n % 3 == 1;
    }

}
